package com.feng.cloud.common.convert;

import org.mapstruct.InheritConfiguration;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.Mappings;

import java.util.Collection;
import java.util.List;

/**
 * @author Better Feng
 * @date 2021/7/19 17:28
 */
public interface BaseObjectMapper<SOURCE, TARGET> {

    /**
     * 如有需要自定义该注解即可
     * 例如：
     *
     * <p></p>
     * 重写此注解时一定要注意 返回值（TARGET） 和 参数（SOURCE） 的顺序
     * @param source 源对象
     * @return TARGET 目标对象
     */
    @Mappings({})
    @InheritConfiguration
    TARGET to(SOURCE source);

    /**
     * 转换
     * @param source source
     * @return List<TARGET>
     */
    @InheritConfiguration
    List<TARGET> to(Collection<SOURCE> source);

    /**
     * 反转
     * @param source source
     * @return SOURCE
     */
    @InheritInverseConfiguration
    SOURCE from(TARGET source);

    /**
     * 反转List
     * @param source source
     * @return List<SOURCE>
     */
    @InheritInverseConfiguration
    List<SOURCE> from(Collection<TARGET> source);

}
